home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d14
/
dde_lib.arc
/
ACCEXCEL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-12-25
|
13KB
|
557 lines
/* **********************************************************
accexcel.c - Access to Excell demo program
Placed in public domain by Horizon Technologies Inc. 1990
***revision history***
1 ACCEXCEL.C 19-Jun-90,10:51:06,`JMH' Base version
2 ACCEXCEL.C 25-Jun-90,14:47:50,`JMH' Version as of 6/25/90
3 ACCEXCEL.C 15-Sep-90,16:36:10,`JMH' Version 1.3
***revision history***
********************************************************** */
#define MAIN
#define NOCOMM
#include "windows.h"
#include "dde.h"
#include "ddelib.h"
#include "string.h"
#include "accexcel.h"
/* Undocumented windows functions */
int FAR PASCAL lstrlen (LPSTR);
LPSTR FAR PASCAL lstrcpy (LPSTR, LPSTR);
LPSTR FAR PASCAL lstrcat (LPSTR, LPSTR);
int FAR PASCAL lstrcmp (LPSTR, LPSTR);
/* Globals */
static HANDLE ghInstance;
static char *gszAppName = "accexcel";
static char gszApp[40] = "excel";
static char gszTopic[40] = "sheet1";
static char gszItem[40] = "r1c1";
static char gszData[80] = "7";
static char gszCommand[80] = "[open(\"sheet2\")]";
static int gcfFormat;
static int fDeferUpd = FALSE;
static int fAckReq = TRUE;
static FARPROC glpfnCallBack;
/* Functions */
int PASCAL WinMain (HANDLE, HANDLE, LPSTR, int);
long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL Initiate (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL Advise (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL Unadvise (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL Request (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL Poke (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL Execute (HWND, unsigned, WORD, LONG);
BOOL FAR PASCAL About (HWND, unsigned, WORD, LONG);
WORD FAR PASCAL CallBack (HWND, unsigned, LPSTR, HANDLE);
int PASCAL WinMain (hInstance, hPrevInstance, lpCmdLine, nCmdShow)
HANDLE hInstance;
HANDLE hPrevInstance;
LPSTR lpCmdLine;
int nCmdShow;
{
WNDCLASS wndclass;
MSG msg;
HWND hWnd;
ghInstance = hInstance;
if ( !hPrevInstance )
{
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon ( hInstance, gszAppName );
wndclass.hCursor = LoadCursor ( NULL, IDC_ARROW );
wndclass.hbrBackground = (HBRUSH) GetStockObject ( WHITE_BRUSH );
wndclass.lpszMenuName = gszAppName;
wndclass.lpszClassName = gszAppName;
if ( !RegisterClass ( &wndclass ) )
return FALSE;
} /* if ! hPrevInstance */
hWnd = CreateWindow ( gszAppName, gszAppName, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL,
hInstance, NULL );
if ( !hWnd )
return ( NULL );
ShowWindow ( hWnd, nCmdShow );
UpdateWindow ( hWnd );
gcfFormat = RegisterClipboardFormat ( "csv" );
glpfnCallBack = MakeProcInstance ( CallBack, ghInstance );
while ( GetMessage ( &msg, NULL, NULL, NULL ) )
{
TranslateMessage ( &msg );
DispatchMessage ( &msg );
} /* while GetMessage */
FreeProcInstance ( glpfnCallBack );
return ( msg.wParam );
} /* function WinMain */
long FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
HWND hWnd;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
static HWND hClient = NULL;
FARPROC lpfnFunc;
DDEACK wAck;
HANDLE hCommand;
HANDLE hPoke;
LPSTR lpCommand;
LPDDEPOKE lpPoke;
DDEADVISE ddeAdvise;
int iRet;
switch ( iMessage )
{
case WM_COMMAND:
switch ( wParam )
{
case IDM_EXIT:
SendMessage ( hWnd, WM_CLOSE, 0, 0L );
break;
case IDM_ABOUT:
lpfnFunc = MakeProcInstance ( About, ghInstance );
DialogBox ( ghInstance, "About", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
break;
case IDM_INITIATE:
if ( hClient )
{
DDETerminate ( hClient );
hClient = NULL;
} /* if hClient */
lpfnFunc = MakeProcInstance ( Initiate, ghInstance );
iRet = DialogBox ( ghInstance, "Initiate", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
if ( iRet == IDOK )
{
hClient = DDEInitiate ( hWnd, gszApp, gszTopic );
MessageBox ( hWnd, hClient ? "Session established" :
"Initiate failed", "Initiate", MB_OK );
} /* if iRet */
break;
case IDM_ADVISE:
if ( !hClient )
break;
lpfnFunc = MakeProcInstance ( Advise, ghInstance );
iRet = DialogBox ( ghInstance, "Advise", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
if ( iRet == IDOK )
{
/* Fill in the advise structure */
ddeAdvise.reserved = 0;
ddeAdvise.fDeferUpd = fDeferUpd;
ddeAdvise.fAckReq = fAckReq;
ddeAdvise.cfFormat = gcfFormat;
*(WORD *) &wAck = DDEAdvise ( hClient, gszItem, &ddeAdvise,
glpfnCallBack );
MessageBox ( hWnd, wAck.fAck ? "Advise succeeded" :
"Advise failed", "Advise", MB_OK );
} /* if iRet */
break;
case IDM_UNADVISE:
if ( !hClient )
break;
lpfnFunc = MakeProcInstance ( Unadvise, ghInstance );
iRet = DialogBox ( ghInstance, "Unadvise", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
if ( iRet == IDOK )
{
*(WORD *) &wAck = DDEUnadvise ( hClient, gszItem );
MessageBox ( hWnd, wAck.fAck ? "Unadvise succeeded" :
"Unadvise failed", "Unadvise", MB_OK );
} /* if iRet */
break;
case IDM_REQUEST:
if ( !hClient )
break;
lpfnFunc = MakeProcInstance ( Request, ghInstance );
iRet = DialogBox ( ghInstance, "Request", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
if ( iRet == IDOK )
{
*(WORD *) &wAck = DDERequest ( hClient, gszItem, gcfFormat,
glpfnCallBack );
MessageBox ( hWnd, wAck.fAck ? "Request succeeded" :
"Request failed", "Request", MB_OK );
} /* if iRet */
break;
case IDM_POKE:
if ( !hClient )
break;
lpfnFunc = MakeProcInstance ( Poke, ghInstance );
iRet = DialogBox ( ghInstance, "Poke", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
if ( iRet == IDOK )
{
hPoke = GlobalAlloc ( GHND | GMEM_DDESHARE, (DWORD) sizeof
( DDEPOKE ) + strlen ( gszData ) );
/* Fill in the poke structure */
lpPoke = (LPDDEPOKE) GlobalLock ( hPoke );
lpPoke->fRelease = TRUE;
lpPoke->cfFormat = gcfFormat;
lstrcpy ( lpPoke->Value, gszData );
GlobalUnlock ( hPoke );
*(WORD *) &wAck = DDEPoke ( hClient, gszItem, hPoke );
MessageBox ( hWnd, wAck.fAck ? "Poke succeeded" :
"Poke failed", "Poke", MB_OK );
} /* if iRet */
break;
case IDM_EXECUTE:
if ( !hClient )
break;
lpfnFunc = MakeProcInstance ( Execute, ghInstance );
iRet = DialogBox ( ghInstance, "Execute", hWnd, lpfnFunc );
FreeProcInstance ( lpfnFunc );
if ( iRet == IDOK )
{
hCommand = GlobalAlloc ( GHND | GMEM_DDESHARE, (DWORD)
strlen ( gszCommand ) );
/* Fill in the poke structure */
lpCommand = (LPSTR) GlobalLock ( hCommand );
lstrcpy ( lpCommand, gszCommand );
GlobalUnlock ( hCommand );
*(WORD *) &wAck = DDEExecute ( hClient, hCommand );
MessageBox ( hWnd, wAck.fAck ? "Execute succeeded" :
"Execute failed", "Execute", MB_OK );
} /* if iRet */
break;
case IDM_TERMINATE:
if ( hClient )
{
DDETerminate ( hClient );
hClient = NULL;
} /* if hClient */
break;
} /* switch wParam */
break;
case WM_DESTROY:
if ( hClient )
{
DDETerminate ( hClient );
hClient = NULL;
} /* if hClient */
PostQuitMessage ( 0 );
break;
default:
return DefWindowProc ( hWnd, iMessage, wParam, lParam );
} /* switch iMessage */
return 0L;
} /* function WndProc */
/* Initiate box */
BOOL FAR PASCAL Initiate (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
SetDlgItemText ( hDlg, IDD_APP, gszApp );
SetDlgItemText ( hDlg, IDD_TOPIC, gszTopic );
break;
case WM_COMMAND:
switch ( wParam )
{
case IDOK:
GetDlgItemText ( hDlg, IDD_APP, gszApp, sizeof ( gszApp ) );
GetDlgItemText ( hDlg, IDD_TOPIC, gszTopic, sizeof ( gszTopic
) );
EndDialog ( hDlg, wParam );
break;
case IDCANCEL:
EndDialog ( hDlg, wParam );
break;
} /* switch wParam */
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function Initiate */
/* Advise box */
BOOL FAR PASCAL Advise (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
SetDlgItemText ( hDlg, IDD_ITEM, gszItem );
break;
case WM_COMMAND:
switch ( wParam )
{
case IDOK:
GetDlgItemText ( hDlg, IDD_ITEM, gszItem, sizeof ( gszItem ) );
EndDialog ( hDlg, wParam );
break;
case IDCANCEL:
EndDialog ( hDlg, wParam );
break;
} /* switch wParam */
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function Advise */
/* Unadvise box */
BOOL FAR PASCAL Unadvise (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
SetDlgItemText ( hDlg, IDD_ITEM, gszItem );
break;
case WM_COMMAND:
switch ( wParam )
{
case IDOK:
GetDlgItemText ( hDlg, IDD_ITEM, gszItem, sizeof ( gszItem ) );
EndDialog ( hDlg, wParam );
break;
case IDCANCEL:
EndDialog ( hDlg, wParam );
break;
} /* switch wParam */
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function Unadvise */
/* Request box */
BOOL FAR PASCAL Request (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
SetDlgItemText ( hDlg, IDD_ITEM, gszItem );
break;
case WM_COMMAND:
switch ( wParam )
{
case IDOK:
GetDlgItemText ( hDlg, IDD_ITEM, gszItem, sizeof ( gszItem ) );
EndDialog ( hDlg, wParam );
break;
case IDCANCEL:
EndDialog ( hDlg, wParam );
break;
} /* switch wParam */
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function Request */
/* Poke box */
BOOL FAR PASCAL Poke (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
SetDlgItemText ( hDlg, IDD_ITEM, gszItem );
SetDlgItemText ( hDlg, IDD_DATA, gszData );
break;
case WM_COMMAND:
switch ( wParam )
{
case IDOK:
GetDlgItemText ( hDlg, IDD_ITEM, gszItem, sizeof ( gszItem ) );
GetDlgItemText ( hDlg, IDD_DATA, gszData, sizeof ( gszData ) );
EndDialog ( hDlg, wParam );
break;
case IDCANCEL:
EndDialog ( hDlg, wParam );
break;
} /* switch wParam */
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function Poke */
/* Execute box */
BOOL FAR PASCAL Execute (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
SetDlgItemText ( hDlg, IDD_COMMAND, gszCommand );
break;
case WM_COMMAND:
switch ( wParam )
{
case IDOK:
GetDlgItemText ( hDlg, IDD_COMMAND, gszCommand,
sizeof ( gszCommand ) );
EndDialog ( hDlg, wParam );
break;
case IDCANCEL:
EndDialog ( hDlg, wParam );
break;
} /* switch wParam */
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function Execute */
/* About box */
BOOL FAR PASCAL About (hDlg, iMessage, wParam, lParam)
HWND hDlg;
unsigned iMessage;
WORD wParam;
LONG lParam;
{
switch ( iMessage )
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
EndDialog ( hDlg, FALSE );
break;
default:
return FALSE;
} /* switch iMessage */
return TRUE;
} /* function About */
/* Callback routine for advise circuit */
WORD FAR PASCAL CallBack (hSession, iMessage, lpszItem, hData)
HWND hSession;
unsigned iMessage;
LPSTR lpszItem;
HANDLE hData;
{
LPDDEDATA lpData;
switch ( iMessage )
{
case DDE_ACK:
break;
case DDE_DATA:
/* Show the data */
lpData = (LPDDEDATA) GlobalLock ( hData );
MessageBox ( NULL, lpData->Value, lpszItem, MB_OK );
GlobalUnlock ( hData );
break;
case DDE_TERMINATE:
break;
}
return NULL;
} /* function CallBack */